<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--基数排序 vs 计数排序 vs 桶排序
              这三种排序算法都利用了桶的概念，但对桶的使用方法上有明显差异：
              基数排序：根据键值的每位数字来分配桶 计数排序：每个桶只存储单一键值 桶排序：每个桶存储一定范围的数值-->
		
		<!--计数排序
		解析:
			计数排序使用一个额外的数组C，
			其中第i个元素是待排序数组A中值等于i的元素的个数。
			然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。-->
		<script type="text/javascript">
			function countingSort(array) {
				var len = array.length,B = [],C = [],
					min = max = array[0];
				console.time('计数排序耗时');
				for (var i = 0; i < len; i++) {
					min = min <= array[i] ? min : array[i];
					max = max >= array[i] ? max : aray[i];
					C[array[i]] = C[array[i]] ? C[array[i]] + 1 : 1; 
				}
				for (var j = min; j < max; j++) {
					C[j + 1] = (C[j + 1] || 0) + (C[j] || 0);
				}
				for (var k = len - 1; k >= 0; k--) {
					B[C[array[k]] - 1] = array[k];
					C[array[k]]--;
				}
				console.timeEnd('计数排序耗时');
				return B;
			}
			var arr = [2, 2, 3, 8, 7, 1, 2, 2, 2, 7, 3, 9, 8, 2, 1, 4, 2, 4, 6]
			document.write(countingSort(arr));
		</script>
	</body>
</html>
